package offer.day27;

import java.util.Arrays;
import java.util.Comparator;

public class No45PrintMinNumber {
    /*
     * 面试题45：把数组排成最小的数
     * 题目：输入一个正整数数组，把数组中所有数字拼接起来排成一个数，
     * 打印能拼接处的所有数字中最小的一个。
     * 例如：输入数组{3，32，321}，则打印出这三个数字能排成的最小数字321323.
     *
     * 思路：1>首先将数值型转换为字符型数组
     *		2>然后重写compare函数  使其能够对两个数值进行比较
     *		3>再调用sort函数，对其进行排序  按照从小到大的顺序
     *		4>最后将重新排好序的字符串使用StringBuilder的append将元素拼接到一起就可以了
     *
     * */
    public static void main(String[] args) {
        No45PrintMinNumber p = new No45PrintMinNumber();
        int[]  array = {3,32,321};
        System.out.println("排出的最小的数："+p.PrintMinNumber(array));
    }

    private String PrintMinNumber(int[] array) {
        if(array==null||array.length==0) return null;
        String[] str=new String[array.length];
        for(int i=0;i<array.length;i++){
            str[i]=String.valueOf(array[i]);
        }
        StringBuilder sb=new StringBuilder();
        Arrays.sort(str, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                String c1=o1+o2;
                String c2=o2+o1;
                return c1.compareTo(c2);
            }
        });
        for(int i=0;i<str.length;i++){
            sb.append(str[i]);
        }
        return sb.toString();
    }
}
